// License: GPL. For details, see LICENSE file.
package public_transport;
import static org.openstreetmap.josm.tools.I18n.marktr;
import static org.openstreetmap.josm.tools.I18n.tr;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.DefaultCellEditor;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.KeyStroke;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
public class StopImporterDialog extends AbstractImporterDialog<StopImporterAction> {
private JList<TrackReference> tracksList = null;
private JTable stoplistTable = null;
private JTable waypointTable = null;
public StopImporterDialog(StopImporterAction controller) {
super(controller, tr("Create Stops from GPX"), "stopImporter");
}
@Override
protected void initDialog(StopImporterAction controller) {
JPanel tabTracks = new JPanel();
tabbedPane.addTab(tr("Tracks"), tabTracks);
JPanel tabSettings = new JPanel();
tabbedPane.addTab(tr("Settings"), tabSettings);
JPanel tabStops = new JPanel();
tabbedPane.addTab(tr("Stops"), tabStops);
JPanel tabWaypoints = new JPanel();
tabbedPane.addTab(tr("Waypoints"), tabWaypoints);
tabbedPane.setEnabledAt(0, true);
tabbedPane.setEnabledAt(1, true);
tabbedPane.setEnabledAt(2, false);
tabbedPane.setEnabledAt(3, true);
// Tracks Tab
JPanel contentPane = tabTracks;
GridBagLayout gridbag = new GridBagLayout();
GridBagConstraints layoutCons = new GridBagConstraints();
contentPane.setLayout(gridbag);
JLabel label = new JLabel(tr("Tracks in this GPX file:"));
layoutCons.gridx = 0;
layoutCons.gridy = 0;
layoutCons.gridwidth = 3;
layoutCons.weightx = 0.0;
layoutCons.weighty = 0.0;
layoutCons.fill = GridBagConstraints.BOTH;
gridbag.setConstraints(label, layoutCons);
contentPane.add(label);
DefaultListModel<TrackReference> tracksListModel = controller.getTracksListModel();
tracksList = new JList<>(tracksListModel);
JScrollPane rpListSP = new JScrollPane(tracksList);
String[] data = {"1", "2", "3", "4", "5", "6"};
tracksListModel.copyInto(data);
tracksList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
tracksList.addListSelectionListener(new TracksLSL(controller));
layoutCons.gridx = 0;
layoutCons.gridy = 1;
layoutCons.gridwidth = 3;
layoutCons.weightx = 1.0;
layoutCons.weighty = 1.0;
layoutCons.fill = GridBagConstraints.BOTH;
gridbag.setConstraints(rpListSP, layoutCons);
contentPane.add(rpListSP);
// Settings Tab
contentPane = tabSettings;
gridbag = new GridBagLayout();
layoutCons = new GridBagConstraints();
contentPane.setLayout(gridbag);
label = new JLabel(tr("Type of stops to add"));
layoutCons.gridx = 0;
layoutCons.gridy = 0;
layoutCons.gridwidth = 2;
layoutCons.weightx = 0.0;
layoutCons.weighty = 0.0;
layoutCons.fill = GridBagConstraints.BOTH;
gridbag.setConstraints(label, layoutCons);
contentPane.add(label);
layoutCons.gridx = 0;
layoutCons.gridy = 1;
layoutCons.gridwidth = 1;
layoutCons.weightx = 0.0;
layoutCons.weighty = 0.0;
layoutCons.fill = GridBagConstraints.BOTH;
gridbag.setConstraints(cbStoptype, layoutCons);
contentPane.add(cbStoptype);
label = new JLabel(tr("Time on your GPS device"));
layoutCons.gridx = 0;
layoutCons.gridy = 2;
layoutCons.gridwidth = 2;
layoutCons.weightx = 0.0;
layoutCons.weighty = 0.0;
layoutCons.fill = GridBagConstraints.BOTH;
gridbag.setConstraints(label, layoutCons);
contentPane.add(label);
layoutCons.gridx = 0;
layoutCons.gridy = 3;
layoutCons.gridwidth = 1;
layoutCons.weightx = 0.0;
layoutCons.weighty = 0.0;
layoutCons.fill = GridBagConstraints.BOTH;
gridbag.setConstraints(tfGPSTimeStart, layoutCons);
contentPane.add(tfGPSTimeStart);
label = new JLabel(tr("HH:MM:SS.sss"));
layoutCons.gridx = 1;
layoutCons.gridy = 3;
layoutCons.gridwidth = 1;
layoutCons.weightx = 0.0;
layoutCons.weighty = 0.0;
layoutCons.fill = GridBagConstraints.BOTH;
gridbag.setConstraints(label, layoutCons);
contentPane.add(label);
label = new JLabel(tr("Time on your stopwatch"));
layoutCons.gridx = 0;
layoutCons.gridy = 4;
layoutCons.gridwidth = 2;
layoutCons.weightx = 0.0;
layoutCons.weighty = 0.0;
layoutCons.fill = GridBagConstraints.BOTH;
gridbag.setConstraints(label, layoutCons);
contentPane.add(label);
layoutCons.gridx = 0;
layoutCons.gridy = 5;
layoutCons.gridwidth = 1;
layoutCons.weightx = 0.0;
layoutCons.weighty = 0.0;
layoutCons.fill = GridBagConstraints.BOTH;
gridbag.setConstraints(tfStopwatchStart, layoutCons);
contentPane.add(tfStopwatchStart);
label = new JLabel(tr("HH:MM:SS.sss"));
layoutCons.gridx = 1;
layoutCons.gridy = 5;
layoutCons.gridwidth = 1;
layoutCons.weightx = 0.0;
layoutCons.weighty = 0.0;
layoutCons.fill = GridBagConstraints.BOTH;
gridbag.setConstraints(label, layoutCons);
contentPane.add(label);
label = new JLabel(tr("Time window"));
layoutCons.gridx = 0;
layoutCons.gridy = 6;
layoutCons.gridwidth = 2;
layoutCons.weightx = 0.0;
layoutCons.weighty = 0.0;
layoutCons.fill = GridBagConstraints.BOTH;
gridbag.setConstraints(label, layoutCons);
contentPane.add(label);
layoutCons.gridx = 0;
layoutCons.gridy = 7;
layoutCons.gridwidth = 1;
layoutCons.weightx = 0.0;
layoutCons.weighty = 0.0;
layoutCons.fill = GridBagConstraints.BOTH;
gridbag.setConstraints(tfTimeWindow, layoutCons);
contentPane.add(tfTimeWindow);
label = new JLabel(tr("seconds"));
layoutCons.gridx = 1;
layoutCons.gridy = 7;
layoutCons.gridwidth = 1;
layoutCons.weightx = 0.0;
layoutCons.weighty = 0.0;
layoutCons.fill = GridBagConstraints.BOTH;
gridbag.setConstraints(label, layoutCons);
contentPane.add(label);
label = new JLabel(tr("Move Threshold"));
layoutCons.gridx = 0;
layoutCons.gridy = 8;
layoutCons.gridwidth = 2;
layoutCons.weightx = 0.0;
layoutCons.weighty = 0.0;
layoutCons.fill = GridBagConstraints.BOTH;
gridbag.setConstraints(label, layoutCons);
contentPane.add(label);
layoutCons.gridx = 0;
layoutCons.gridy = 9;
layoutCons.gridwidth = 1;
layoutCons.weightx = 0.0;
layoutCons.weighty = 0.0;
layoutCons.fill = GridBagConstraints.BOTH;
gridbag.setConstraints(tfThreshold, layoutCons);
contentPane.add(tfThreshold);
label = new JLabel(tr("meters"));
layoutCons.gridx = 1;
layoutCons.gridy = 9;
layoutCons.gridwidth = 1;
layoutCons.weightx = 0.0;
layoutCons.weighty = 0.0;
layoutCons.fill = GridBagConstraints.BOTH;
gridbag.setConstraints(label, layoutCons);
contentPane.add(label);
JButton bSuggestStops = new JButton(tr("Suggest Stops"));
bSuggestStops.setActionCommand("stopImporter.settingsSuggestStops");
bSuggestStops.addActionListener(controller);
layoutCons.gridx = 0;
layoutCons.gridy = 10;
layoutCons.gridwidth = 3;
layoutCons.weightx = 1.0;
layoutCons.weighty = 0.0;
layoutCons.fill = GridBagConstraints.BOTH;
gridbag.setConstraints(bSuggestStops, layoutCons);
contentPane.add(bSuggestStops);
// Stops Tab
contentPane = tabStops;
gridbag = new GridBagLayout();
layoutCons = new GridBagConstraints();
contentPane.setLayout(gridbag);
contentPane.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
.put(KeyStroke.getKeyStroke("alt N"), "stopImporter.focusName");
contentPane.getActionMap().put("stopImporter.focusName",
controller.getFocusTrackStoplistNameAction());
contentPane.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
.put(KeyStroke.getKeyStroke("alt S"), "stopImporter.focusShelterYes");
contentPane.getActionMap().put("stopImporter.focusShelterYes",
controller.getFocusTrackStoplistShelterAction("yes"));
contentPane.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
.put(KeyStroke.getKeyStroke("alt T"), "stopImporter.focusShelterNo");
contentPane.getActionMap().put("stopImporter.focusShelterNo",
controller.getFocusTrackStoplistShelterAction("no"));
contentPane.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
.put(KeyStroke.getKeyStroke("alt U"), "stopImporter.focusShelterImplicit");
contentPane.getActionMap().put("stopImporter.focusShelterImplicit",
controller.getFocusTrackStoplistShelterAction("implicit"));
contentPane.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
.put(KeyStroke.getKeyStroke("alt D"), "stopImporter.stoplistDelete");
contentPane.getActionMap().put("stopImporter.stoplistDelete",
controller.getFocusStoplistDeleteAction());
stoplistTable = new JTable();
JScrollPane tableSP = new JScrollPane(stoplistTable);
layoutCons.gridx = 0;
layoutCons.gridy = 0;
layoutCons.gridwidth = 4;
layoutCons.weightx = 1.0;
layoutCons.weighty = 1.0;
layoutCons.fill = GridBagConstraints.BOTH;
gridbag.setConstraints(tableSP, layoutCons);
contentPane.add(tableSP);
JButton bFind = new JButton(tr("Find"));
bFind.setActionCommand("stopImporter.stoplistFind");
bFind.addActionListener(controller);
layoutCons.gridx = 0;
layoutCons.gridy = 1;
layoutCons.gridwidth = 1;
layoutCons.weightx = 1.0;
layoutCons.weighty = 0.0;
layoutCons.fill = GridBagConstraints.BOTH;
gridbag.setConstraints(bFind, layoutCons);
contentPane.add(bFind);
JButton bShow = new JButton(tr("Show"));
bShow.setActionCommand("stopImporter.stoplistShow");
bShow.addActionListener(controller);
layoutCons.gridx = 0;
layoutCons.gridy = 2;
layoutCons.gridwidth = 1;
layoutCons.weightx = 1.0;
layoutCons.weighty = 0.0;
layoutCons.fill = GridBagConstraints.BOTH;
gridbag.setConstraints(bShow, layoutCons);
contentPane.add(bShow);
JButton bMark = new JButton(tr("Mark"));
bMark.setActionCommand("stopImporter.stoplistMark");
bMark.addActionListener(controller);
layoutCons.gridx = 1;
layoutCons.gridy = 1;
layoutCons.gridheight = 1;
layoutCons.gridwidth = 1;
layoutCons.weightx = 1.0;
layoutCons.weighty = 0.0;
layoutCons.fill = GridBagConstraints.BOTH;
gridbag.setConstraints(bMark, layoutCons);
contentPane.add(bMark);
JButton bDetach = new JButton(tr("Detach"));
bDetach.setActionCommand("stopImporter.stoplistDetach");
bDetach.addActionListener(controller);
layoutCons.gridx = 1;
layoutCons.gridy = 2;
layoutCons.gridheight = 1;
layoutCons.gridwidth = 1;
layoutCons.weightx = 1.0;
layoutCons.weighty = 0.0;
layoutCons.fill = GridBagConstraints.BOTH;
gridbag.setConstraints(bDetach, layoutCons);
contentPane.add(bDetach);
JButton bAdd = new JButton(tr("Add"));
bAdd.setActionCommand("stopImporter.stoplistAdd");
bAdd.addActionListener(controller);
layoutCons.gridx = 2;
layoutCons.gridy = 1;
layoutCons.gridheight = 1;
layoutCons.gridwidth = 1;
layoutCons.weightx = 1.0;
layoutCons.weighty = 0.0;
layoutCons.fill = GridBagConstraints.BOTH;
gridbag.setConstraints(bAdd, layoutCons);
contentPane.add(bAdd);
JButton bDelete = new JButton(tr("Delete"));
bDelete.setActionCommand("stopImporter.stoplistDelete");
bDelete.addActionListener(controller);
layoutCons.gridx = 2;
layoutCons.gridy = 2;
layoutCons.gridwidth = 1;
layoutCons.weightx = 1.0;
layoutCons.weighty = 0.0;
layoutCons.fill = GridBagConstraints.BOTH;
gridbag.setConstraints(bDelete, layoutCons);
contentPane.add(bDelete);
JButton bSort = new JButton(tr("Sort"));
bSort.setActionCommand("stopImporter.stoplistSort");
bSort.addActionListener(controller);
layoutCons.gridx = 3;
layoutCons.gridy = 1;
layoutCons.gridheight = 2;
layoutCons.gridwidth = 1;
layoutCons.weightx = 1.0;
layoutCons.weighty = 0.0;
layoutCons.fill = GridBagConstraints.BOTH;
gridbag.setConstraints(bSort, layoutCons);
contentPane.add(bSort);
// Waypoints Tab
contentPane = tabWaypoints;
gridbag = new GridBagLayout();
layoutCons = new GridBagConstraints();
contentPane.setLayout(gridbag);
contentPane.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
.put(KeyStroke.getKeyStroke("alt N"), "stopImporter.focusName");
contentPane.getActionMap().put("stopImporter.focusName",
controller.getFocusWaypointNameAction());
contentPane.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
.put(KeyStroke.getKeyStroke("alt S"), "stopImporter.focusShelterYes");
contentPane.getActionMap().put("stopImporter.focusShelterYes",
controller.getFocusWaypointShelterAction("yes"));
contentPane.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
.put(KeyStroke.getKeyStroke("alt T"), "stopImporter.focusShelterNo");
contentPane.getActionMap().put("stopImporter.focusShelterNo",
controller.getFocusWaypointShelterAction("no"));
contentPane.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
.put(KeyStroke.getKeyStroke("alt U"), "stopImporter.focusShelterImplicit");
contentPane.getActionMap().put("stopImporter.focusShelterImplicit",
controller.getFocusWaypointShelterAction("implicit"));
contentPane.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
.put(KeyStroke.getKeyStroke("alt D"), "stopImporter.waypointsDelete");
contentPane.getActionMap().put("stopImporter.waypointsDelete",
controller.getFocusWaypointDeleteAction());
waypointTable = new JTable();
tableSP = new JScrollPane(waypointTable);
layoutCons.gridx = 0;
layoutCons.gridy = 0;
layoutCons.gridwidth = 3;
layoutCons.weightx = 1.0;
layoutCons.weighty = 1.0;
layoutCons.fill = GridBagConstraints.BOTH;
gridbag.setConstraints(tableSP, layoutCons);
contentPane.add(tableSP);
bFind = new JButton(tr("Find"));
bFind.setActionCommand("stopImporter.waypointsFind");
bFind.addActionListener(controller);
layoutCons.gridx = 0;
layoutCons.gridy = 1;
layoutCons.gridwidth = 1;
layoutCons.weightx = 1.0;
layoutCons.weighty = 0.0;
layoutCons.fill = GridBagConstraints.BOTH;
gridbag.setConstraints(bFind, layoutCons);
contentPane.add(bFind);
bShow = new JButton(tr("Show"));
bShow.setActionCommand("stopImporter.waypointsShow");
bShow.addActionListener(controller);
layoutCons.gridx = 0;
layoutCons.gridy = 2;
layoutCons.gridwidth = 1;
layoutCons.weightx = 1.0;
layoutCons.weighty = 0.0;
layoutCons.fill = GridBagConstraints.BOTH;
gridbag.setConstraints(bShow, layoutCons);
contentPane.add(bShow);
bMark = new JButton(tr("Mark"));
bMark.setActionCommand("stopImporter.waypointsMark");
bMark.addActionListener(controller);
layoutCons.gridx = 1;
layoutCons.gridy = 1;
layoutCons.gridheight = 1;
layoutCons.gridwidth = 1;
layoutCons.weightx = 1.0;
layoutCons.weighty = 0.0;
layoutCons.fill = GridBagConstraints.BOTH;
gridbag.setConstraints(bMark, layoutCons);
contentPane.add(bMark);
bDetach = new JButton(tr("Detach"));
bDetach.setActionCommand("stopImporter.waypointsDetach");
bDetach.addActionListener(controller);
layoutCons.gridx = 1;
layoutCons.gridy = 2;
layoutCons.gridheight = 1;
layoutCons.gridwidth = 1;
layoutCons.weightx = 1.0;
layoutCons.weighty = 0.0;
layoutCons.fill = GridBagConstraints.BOTH;
gridbag.setConstraints(bDetach, layoutCons);
contentPane.add(bDetach);
bAdd = new JButton(tr("Enable"));
bAdd.setActionCommand("stopImporter.waypointsAdd");
bAdd.addActionListener(controller);
layoutCons.gridx = 2;
layoutCons.gridy = 1;
layoutCons.gridheight = 1;
layoutCons.gridwidth = 1;
layoutCons.weightx = 1.0;
layoutCons.weighty = 0.0;
layoutCons.fill = GridBagConstraints.BOTH;
gridbag.setConstraints(bAdd, layoutCons);
contentPane.add(bAdd);
bDelete = new JButton(tr("Disable"));
bDelete.setActionCommand("stopImporter.waypointsDelete");
bDelete.addActionListener(controller);
layoutCons.gridx = 2;
layoutCons.gridy = 2;
layoutCons.gridwidth = 1;
layoutCons.weightx = 1.0;
layoutCons.weighty = 0.0;
layoutCons.fill = GridBagConstraints.BOTH;
gridbag.setConstraints(bDelete, layoutCons);
contentPane.add(bDelete);
}
public JTable getStoplistTable() {
return stoplistTable;
}
public void setStoplistTableModel(TrackStoplistTableModel model) {
stoplistTable.setModel(model);
JComboBox<TransText> comboBox = new JComboBox<>();
comboBox.addItem(new TransText(null));
comboBox.addItem(new TransText(marktr("yes")));
comboBox.addItem(new TransText(marktr("no")));
comboBox.addItem(new TransText(marktr("implicit")));
stoplistTable.getColumnModel().getColumn(2).setCellEditor(new DefaultCellEditor(comboBox));
int width = stoplistTable.getPreferredSize().width;
stoplistTable.getColumnModel().getColumn(0).setPreferredWidth((int) (width * 0.4));
stoplistTable.getColumnModel().getColumn(1).setPreferredWidth((int) (width * 0.5));
stoplistTable.getColumnModel().getColumn(2).setPreferredWidth((int) (width * 0.1));
}
public JTable getWaypointsTable() {
return waypointTable;
}
public void setWaypointsTableModel(WaypointTableModel model) {
waypointTable.setModel(model);
JComboBox<TransText> comboBox = new JComboBox<>();
comboBox.addItem(new TransText(null));
comboBox.addItem(new TransText(marktr("yes")));
comboBox.addItem(new TransText(marktr("no")));
comboBox.addItem(new TransText(marktr("implicit")));
waypointTable.getColumnModel().getColumn(2).setCellEditor(new DefaultCellEditor(comboBox));
int width = waypointTable.getPreferredSize().width;
waypointTable.getColumnModel().getColumn(0).setPreferredWidth((int) (width * 0.4));
waypointTable.getColumnModel().getColumn(1).setPreferredWidth((int) (width * 0.5));
waypointTable.getColumnModel().getColumn(2).setPreferredWidth((int) (width * 0.1));
}
private class TracksLSL implements ListSelectionListener {
StopImporterAction root = null;
TracksLSL(StopImporterAction sia) {
root = sia;
}
@Override
public void valueChanged(ListSelectionEvent e) {
int selectedPos = tracksList.getAnchorSelectionIndex();
if (tracksList.isSelectedIndex(selectedPos))
root.tracksSelectionChanged(selectedPos);
else
root.tracksSelectionChanged(-1);
}
}
}